package com.gxa.clientarticle.controller;

/*
 *
 *@author leijun
 *
 *@creating 2020/10/16 9:26
 *
 */


import com.gxa.clientarticle.exception.BusinessException;
import com.gxa.clientarticle.utils.JsonResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

/**
 * 异常处理的总入口
 * @ClassName ExceptionController
 * @Description TODO
 * @Author 俊
 * @Date 2020/10/16 9:26
 * @Version 1.0
 */
@RestController
@ControllerAdvice  //接收所有异常的目的地
public class ExceptionController {

    @ExceptionHandler(Throwable.class)
    public Map hander(Exception e){
        JsonResult jsonResult=new JsonResult();
        //当业务层抛出异常时，格式是:
        //throw new BusinessException( 注册手机号重复");
        //业务异常的处理规范
        if(e instanceof BusinessException){
            //统一规范返回给前端的失败状态为0
            jsonResult.setCode("0");
            // 把异常中的信息放回给前端
            jsonResult.setMsg(e.getMessage());
        }else {
            jsonResult.setCode("500");
            jsonResult.setMsg("系统开小差了");
            //springboot开发的程序，打成jar包， 在服务器中运行
            //挂起: nohup java -jar springbooot229.jar &
            //把异常信息记录到nohup.out文件中

            SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH小时mm分钟ss秒");
            System.out.println("-------------"+format.format(new Date())+"-----------------");
            System.out.println(e.toString()); //异常发生的类型和原因

//            如果项目上线，可以不打印栈信息，否则会导致nobup.out文件太大
//            e.printStackTrace();

        }
        return jsonResult.getValues();
    }
}
